<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 封装栈类
    function Stack() {
        // 栈中的属性
        this.items = []

        // 栈的相关操作
        // 1.将元素压入栈
        // this.push = function () {}
        Stack.prototype.push = function (element) {
            this.items.push(element)
        }

        // 2.从栈中提取元素
        Stack.prototype.pop = function () {
            return this.items.pop()
        }

        // 3.查看一下栈顶元素
        Stack.prototype.peek = function () {
            return this.items[this.items.length - 1]
        }

        // 4.判断栈是否为空
        Stack.prototype.isEmpty = function () {
            return this.items.length == 0
        }
        // 5.获取栈中的元素的个数
        Stack.prototype.size = function () {
            return this.items.length
        }

        //6.toString方法
        Stack.prototype.toString = function () {
            // 20 10 12 8 7
            var resultString = ''
            for (var i = 0; i < this.items.length; i++) {
                resultString += this.items[i] + ' '
            }
            return resultString
        }
    }
    // 栈的使用
    var s = new Stack()
    s.push(20)
    s.push(30)
    alert(s)


    // 函数：将十进制转二进制
    function dec2bin(decNumber) {
        // 1.定义栈对象
        var stack = new Stack()

        // 2.循环操作
        while (decNumber > 0 ) {
            // 2.1 获取余数，并且放入到栈中
            stack.push(decNumber % 2)

            // 2.2获取整除后的结果，作为下次计算的数字
            decNumber = Math.floor(decNumber / 2)

        }

        //3.从栈中取出0和1
        var binaryString = ''
        while (!stack.isEmpty()) {
            binaryString += stack.pop()
        }
        return binaryString
    }

    // 测试函数
    // alert(dec2bin(100))
    // alert(dec2bin(10))
    </script>
</body>
</html>
